#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int QDataType;

typedef struct QueueNode
{
	QDataType val;
	struct QueueNode* next;
}QNode, * pQNode;

typedef struct Queue
{
	pQNode head;
	pQNode tail;
	int size;
}Queue, * pQueue;

void QueueInit(pQueue pq);

pQNode BuyQueueNode(QDataType data);

void QueuePush(pQueue pq, QDataType data);

void QueuePop(pQueue pq);

bool QueueEmpty(pQueue pq);

QDataType QueueFront(pQueue pq);

QDataType QueueBack(pQueue pq);

int QueueSize(pQueue pq);

void QueueDestory(pQueue pq);